package com.hb.C_Lambda表达式和集合.E_内联函数

/**
 * 返回值是最后一行
 *
 * run=let+with
 *
 *1、 run函数使用的一般结构
   object.run{
    //todo
    }
 *2、run函数的inline+lambda结构
    @kotlin.internal.InlineOnly
    public inline fun <T, R> T.run(block: T.() -> R): R = block()
 *3、run函数的inline结构分析
 * run函数实际上可以说是let和with两个函数的结合体，
 * run函数只接收一个lambda函数为参数，以闭包形式返回，
 * 返回值为最后一行的值或者指定的return的表达式。
 *
 * 4、run函数的适用场景
 * 适用于let,with函数任何场景。因为run函数是let,with两个函数结合体，
 * 准确来说它弥补了let函数在函数体内必须使用it参数替代对象，
 * 在run函数中可以像with函数一样可以省略，直接访问实例的公有属性和方法，
 * 另一方面它弥补了with函数传入对象判空问题，在run函数中可以像let函数一样做判空处理
 */
fun main() {
    val user = User("Kotlin", 1)

    val result = user.run {
        println("my name is $name, I am $age years old")
        1000
    }
    println("result: $result")
}